In [1]:
class Producto:
def __init__(self,referencia,nombre,pvp,descripcion):
self.referencia = referencia
self.nombre = nombre
self.pvp = pvp
self.descripcion = descripcion
def __str__(self):
return """\
REFERENCIA\t{}
NOMBRE\t\t{}
PVP\t\t{}
DESCRIPCIÓN\t{}""".format(self.referencia,self.nombre,self.pvp,self.descripcion)
class Adorno(Producto):
pass
class Alimento(Producto):
productor = ""
distribuidor = ""
def __str__(self):
return """\
REFERENCIA\t{}
NOMBRE\t\t{}
PVP\t\t{}
DESCRIPCIÓN\t{}
PRODUCTOR\t{}
DISTRIBUIDOR\t{}""".format(self.referencia,self.nombre,self.pvp,self.descripcion,self.productor,self.distribuidor)
class Libro(Producto):
isbn = ""
autor = ""
def __str__(self):
return """\
REFERENCIA\t{}
NOMBRE\t\t{}
PVP\t\t{}
DESCRIPCIÓN\t{}
ISBN\t\t{}
AUTOR\t\t{}""".format(self.referencia,self.nombre,self.pvp,self.descripcion,self.isbn,self.autor)
In [24]:
ad = Adorno(2034,"Vaso adornado",15,"Vaso de porcelana adornado con árboles")
al = Alimento(2035,"Botella de Aceite de Oliva Extra",5,"250 ML")
al.productor = "La Aceitera"
al.distribuidor = "Distribuciones SA"
li = Libro(2036,"Cocina Mediterránea",9,"Recetas sanas y buenas")
li.isbn = "0-123456-78-9"
li.autor = "Doña Juana"
In [3]:
productos = [ad, al]
In [4]:
productos.append(li)
In [5]:
productos
Out[5]:
In [6]:
for p in productos:
print(p,"\n")
In [7]:
for p in productos:
print(p.referencia, p.nombre)
In [8]:
for p in productos:
print(p.autor)
In [9]:
for p in productos:
if( isinstance(p, Adorno) ):
print(p.referencia,p.nombre)
elif( isinstance(p, Alimento) ):
print(p.referencia,p.nombre,p.productor)
elif( isinstance(p, Libro) ):
print(p.referencia,p.nombre,p.isbn)
In [27]:
def rebajar_producto(p, rebaja):
"""Rebaja un producto en porcentaje de su precio"""
p.pvp = p.pvp - (p.pvp/100 * rebaja)
rebajar_producto(al, 10)
print(al_rebajado)
In [16]:
print(al)
In [25]:
copia_al = al
In [26]:
copia_al.referencia = 2038
In [28]:
print(copia_al)
In [29]:
print(al)
In [30]:
l = [1,2,3]
In [34]:
l2 = l[:]
In [35]:
l2.append(4)
In [36]:
l
Out[36]:
In [37]:
import copy
copia_ad = copy.copy(ad)
In [38]:
print(copia_ad)
In [39]:
copia_ad.pvp = 25
In [40]:
print(copia_ad)
In [41]:
print(ad)
In [2]:
def rebajar_producto(p, rebaja):
p.pvp = p.pvp - (p.pvp/100 * rebaja)
El método rebajar_producto() es capaz de tomar objetos de distintas subclases y manipular el atributo pvp.
La acción de manipular el pvp funcionará siempre que los objetos tengan ése atributo, pero en el caso de no ser así, daría error.
La polimorfia es implícita en Python en todos los objetos, ya que todos son hijos de una superclase común llamada Object.